package me.yangzhi.day_14;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

/**
 * Volley 网络请求示例
 * 展示如何使用 Volley 框架进行网络请求
 */
public class OkHttpExample extends AppCompatActivity {
    private static final String TAG = "VolleyExample";
    
    // API 接口地址
    private static final String BAIDU_LOGO_URL = "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png";
    private static final String GET_API_URL = "https://v1.hitokoto.cn/";
    private static final String TEXT_API_URL = "https://v1.hitokoto.cn/?c=b";

    // UI 组件
    private TextView resultTextView;
    private ImageView baiduLogoImageView;
    private Button loadImageButton;
    private Button getRequestButton;
    private Button postRequestButton;

    // Volley 请求队列
    private RequestQueue requestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_okhttp_example);

        // 初始化 Volley 请求队列
        requestQueue = Volley.newRequestQueue(this);

        // 初始化 UI 组件
        initViews();
        // 设置点击事件
        setupClickListeners();
    }

    /**
     * 初始化视图组件
     */
    private void initViews() {
        resultTextView = findViewById(R.id.resultTextView);
        baiduLogoImageView = findViewById(R.id.baiduLogoImageView);
        loadImageButton = findViewById(R.id.loadImageButton);
        getRequestButton = findViewById(R.id.getRequestButton);
        postRequestButton = findViewById(R.id.postRequestButton);
    }

    /**
     * 设置按钮点击事件
     */
    private void setupClickListeners() {
        // 加载图片按钮点击事件
        loadImageButton.setOnClickListener(v -> loadBaiduLogo());
        // GET 请求按钮点击事件
        getRequestButton.setOnClickListener(v -> performGetRequest());
        // POST 请求按钮点击事件
        postRequestButton.setOnClickListener(v -> performTextRequest());
    }

    /**
     * 加载百度 Logo 图片
     * 使用 Volley 的 ImageRequest 加载图片
     */
    private void loadBaiduLogo() {
        // 创建图片请求
        ImageRequest request = new ImageRequest(
                BAIDU_LOGO_URL,
                new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap response) {
                        // 请求成功处理
                        baiduLogoImageView.setImageBitmap(response);
                        resultTextView.setText("图片加载成功了！");
                        Log.d(TAG, "图片加载成功");
                    }
                },
                0,  // 最大宽度，0 表示不限制
                0,  // 最大高度，0 表示不限制
                ImageView.ScaleType.FIT_CENTER,  // 图片缩放类型
                Bitmap.Config.RGB_565,  // 图片解码配置
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // 请求失败处理
                        Toast.makeText(OkHttpExample.this, "加载图片失败: " + error.getMessage(), Toast.LENGTH_SHORT).show();
                        Log.e(TAG, "加载图片失败", error);
                    }
                }
        );

        // 将请求添加到队列
        requestQueue.add(request);
    }

    /**
     * 执行 GET 请求示例
     * 获取每日一言
     */
    private void performGetRequest() {
        // 创建 GET 请求
        JsonObjectRequest request = new JsonObjectRequest(
                Request.Method.GET,
                GET_API_URL,
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        // 请求成功处理
                        resultTextView.setText(response.toString());
                        Log.d(TAG, "GET 响应成功: " + response.toString());
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // 请求失败处理
                        Toast.makeText(OkHttpExample.this, "GET 请求失败: " + error.getMessage(), Toast.LENGTH_SHORT).show();
                        Log.e(TAG, "GET 请求失败", error);
                    }
                }
        );

        // 将请求添加到队列
        requestQueue.add(request);
    }

    /**
     * 执行 POST 请求示例
     * 获取文字类型的一言
     */
    private void performTextRequest() {
        // 创建 POST 请求体
        JSONObject jsonBody = new JSONObject();
        try {
            jsonBody.put("type", "text");
        } catch (Exception e) {
            Log.e(TAG, "创建请求体失败", e);
            return;
        }

        // 创建 POST 请求
        JsonObjectRequest request = new JsonObjectRequest(
                Request.Method.POST,
                GET_API_URL,
                jsonBody,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        // 请求成功处理
                        resultTextView.setText(response.toString());
                        Log.d(TAG, "POST 响应成功: " + response.toString());
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // 请求失败处理
                        Toast.makeText(OkHttpExample.this, "POST 请求失败: " + error.getMessage(), Toast.LENGTH_SHORT).show();
                        Log.e(TAG, "POST 请求失败", error);
                    }
                }
        );

        // 将请求添加到队列
        requestQueue.add(request);
    }
} 